package Offer66;

/**
 * 加一
 * 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 *
 * @author 23737
 * @time 2021.10.21
 */
public class Text_Two {
    public static void main(String[] args) {
        int[] a = new int[]{9,8,7,6,5,4,3,2,1,0};
        int[] ints = new Solution_Two().plusOne(a);
        for (int i = 0; i < ints.length; i++) {
            System.out.println(ints[i]);
        }
    }
}

/**
 * 字符串来求解，当样例很大（超过long的范围）就过不了
 */
class Solution_Two {
    public int[] plusOne(int[] digits) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < digits.length; i++) {
            String s = String.valueOf(digits[i]);
            stringBuilder.append(s);
        }
        String s = stringBuilder.toString();
        long num = Long.parseLong(s.trim());
        num = num+1;
        String s1 = String.valueOf(num);
        int len = s1.length();
        int[] a = new int[len];
        for (int i = 0; i < len; i++) {
            a[i] = s1.charAt(i)-'0';
        }
        return a;
    }
}

/**
 * 这个思想好哇
 * 从数组的尾部开始遍历，如果最后一位是9，那么将其置为0，如果不是，那么将其加一并返回数组
 */
class Solution_Two_2{
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] != 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        //跳出for循环，说明数字全部是9
        int[] temp = new int[digits.length + 1];
        temp[0] = 1;
        return temp;
    }
}

